package org.goj.user.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.goj.common.entity.user.User;
import org.goj.feign.feign.BaseFeignClient;
import org.goj.user.vo.PersonClassifyVO;
import org.goj.user.vo.PersonInfo;
import org.goj.user.vo.PersonRecord;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 用户信息 服务类
 * </p>
 *
 * @author CK
 * @since 2020-12-02
 */
public interface UserService extends IService<User> {

    /**
     * 添加一个新用户且分配一个角色
     *
     * @param email    用户邮箱
     * @param password 用户密码
     * @return boolean
     * @author CK
     * @date 2020/12/17 14:12
     */
    boolean insertUserAndUserRole(String email, String password);

    /**
     * 查询个人擅长分类
     *
     * @param userId 用户ID
     * @return Map<List < String>,Map<Integer,String>>
     * @author CK
     * @date 2021/4/6 12:45
     */
    PersonClassifyVO personClassify(Integer userId);

    /**
     * 查询个人活动记录
     *
     * @param userId  用户ID
     * @param size    分页数量
     * @param current 当前页
     * @return Page<PersonRecord>
     * @author CK
     * @date 2021/4/6 15:25
     */
    Page<PersonRecord> personRecord(Integer userId, Integer current, Integer size);

    /**
     * 查询个人基本信息
     *
     * @param userId 用户ID
     * @return PersonInfo
     * @author CK
     * @date 2021/4/7 11:20
     */
    PersonInfo personInfo(Integer userId);

    /**
     * 更新个人基本信息
     *
     * @param userId      用户ID
     * @param sex         性别
     * @param nick        昵称
     * @param description 签名
     * @return boolean
     * @author CK
     * @date 2021/4/7 16:08
     */
    boolean baseInfo(Integer userId, Integer sex, String nick, String description);

    /**
     * 更新个人头像
     *
     * @param baseFeignClient 基础服务Feign
     * @param userId          用户ID
     * @param image           图片
     * @return String
     * @author CK
     * @date 2021/4/7 17:00
     */
    String uploadImage(BaseFeignClient baseFeignClient, Integer userId, MultipartFile image);

    /**
     * 更新用户的学校信息
     *
     * @param userId 用户ID
     * @param school 学校名称
     * @param clbum  班级
     * @param number 学号
     * @return boolean
     * @author CK
     * @date 2021/4/7 19:16
     */
    boolean schoolInfo(Integer userId, String school, String clbum, String number);

    /**
     * 更新用户邮箱
     *
     * @param userId   用户ID
     * @param password 密码
     * @param email    邮箱
     * @param code     验证码
     * @return boolean
     * @author CK
     * @date 2021/4/7 19:57
     */
    boolean updateEmail(Integer userId, String password, String email, String code);

    /**
     * 用户修改密码
     *
     * @param userId   用户ID
     * @param password 原密码
     * @param newPass  新密码
     * @param rePass   确认密码
     * @param email    邮箱
     * @param code     验证码
     * @return boolean
     * @author CK
     * @date 2021/4/7 21:07
     */
    boolean updatePassword(Integer userId, String password, String newPass, String rePass, String email, String code);

    /**
     * 查询用户列表
     *
     * @param name      昵称或班级或学号
     * @param defunct   状态
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @param current   当前页
     * @param size      页面大小
     * @return Page<User>
     * @author CK
     * @date 2021/5/10 21:01
     */
    Page<User> userList(String name, String defunct, String startDate, String endDate, Integer current, Integer size);

    /**
     * 添加用户
     *
     * @param email    邮箱
     * @param password 密码
     * @param defunct  状态
     * @param nick     昵称
     * @param sex      性别
     * @param roleId   角色ID
     * @param clbum    班级
     * @param number   学号
     * @return boolean
     * @author CK
     * @date 2021/5/11 14:46
     */
    boolean insertUser(String email, String password, String defunct, String nick, Integer sex, Integer roleId, String clbum, String number);

}
